From e3ee1df456926240caf407ca7b6b7fab3cb5f08b Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Tue, 30 Jul 2019 14:01:11 -0400 Subject: [PATCH] Add an image comparison utility This comes in handy sometimes, and we already have the image diff code. --- testsuite/reftests/image-compare.c | 63 ++++++++++++++++++++++++++++++ testsuite/reftests/meson.build | 3 ++ 2 files changed, 66 insertions(+) create mode 100644 testsuite/reftests/image-compare.c diff --git a/testsuite/reftests/image-compare.c b/testsuite/reftests/image-compare.c new file mode 100644 index 0000000000..a69bdeac3f --- /dev/null +++ b/testsuite/reftests/image-compare.c @@ -0,0 +1,63 @@ +#include "config.h" + +#include "reftest-compare.h" + +static char *opt_filename; +static gboolean opt_quiet; + +int +main (int argc, char **argv) +{ + cairo_surface_t *image1; + cairo_surface_t *image2; + cairo_surface_t *diff; + GOptionEntry entries[] = { + {"output", 'o', 0, G_OPTION_ARG_FILENAME, &opt_filename, "Output location", "FILE" }, + {"quiet", 'q', 0, G_OPTION_ARG_NONE, &opt_quiet, "Don't talk", NULL }, + { NULL, } + }; + GOptionContext *context; + GError *error = NULL; + + context = g_option_context_new ("FILE1 FILE2"); + g_option_context_add_main_entries (context, entries, NULL); + if (!g_option_context_parse (context, &argc, &argv, &error)) + { + if (error != NULL) + g_printerr ("%s\n", error->message); + else + g_printerr ("Option parse error\n"); + exit (1); + } + + if (argc < 3) + { + g_printerr ("Must specify two files\n"); + exit (1); + } + + image1 = cairo_image_surface_create_from_png (argv[1]); + image2 = cairo_image_surface_create_from_png (argv[2]); + + diff = reftest_compare_surfaces (image1, image2); + + if (opt_filename && diff) + cairo_surface_write_to_png (diff, opt_filename); + + if (!opt_quiet) + { + if (diff) + { + if (opt_filename) + g_print ("Differences witten to %s.\n", opt_filename); + else + g_print ("The images are different.\n"); + } + else + g_print ("No differences.\n"); + } + + if (!opt_quiet) + + return diff != NULL ? 1 : 0; +} diff --git a/testsuite/reftests/meson.build b/testsuite/reftests/meson.build index 20c45566b6..6cba6cd451 100644 --- a/testsuite/reftests/meson.build +++ b/testsuite/reftests/meson.build @@ -30,6 +30,9 @@ gtk_reftest = executable('gtk-reftest', 'gtk-reftest.c', link_with : [libgtkreftestprivate, libreftest], dependencies : libgtk_dep) +image_compare = executable('image-compare', 'image-compare.c', + link_with : [libgtkreftestprivate, libreftest], + dependencies : libgtk_dep) # Installed data (TODO) testdata = [ -- 2.30.2